#ifndef HISTORYMANAGER_H
#define HISTORYMANAGER_H

#include <QObject>
#include <QStringList>
#include <QFileInfo>
#include <QSettings>

/**
 * @brief 文件历史记录管理器
 * 负责跟踪和管理最近打开的文件列表
 */
class HistoryManager : public QObject
{
    Q_OBJECT

public:
    explicit HistoryManager(QObject *parent = nullptr);
    ~HistoryManager() override;

    /**
     * @brief 获取最近文件列表
     * @return 最近打开的文件路径列表
     */
    QStringList recentFiles() const;

    /**
     * @brief 添加文件到最近列表
     * @param path 文件路径
     * @param maxCount 最大保留数量
     */
    void addRecentFile(const QString &path, int maxCount = 10);

    /**
     * @brief 从最近列表中移除文件
     * @param path 文件路径
     */
    void removeRecentFile(const QString &path);

    /**
     * @brief 清除最近文件列表
     */
    void clearRecentFiles();

    /**
     * @brief 检查文件是否存在于最近列表中
     * @param path 文件路径
     * @return 如果存在则返回true
     */
    bool contains(const QString &path) const;

    /**
     * @brief 获取最近文件的显示名称
     * @param path 文件路径
     * @return 格式化的显示名称
     */
    QString displayName(const QString &path) const;

    /**
     * @brief 获取最近文件的简短路径
     * @param path 文件路径
     * @param maxLength 最大显示长度
     * @return 缩短的路径
     */
    QString shortPath(const QString &path, int maxLength = 50) const;

signals:
    /**
     * @brief 当最近文件列表更改时发出
     */
    void recentFilesChanged();

private:
    /**
     * @brief 加载历史记录
     */
    void loadHistory();

    /**
     * @brief 保存历史记录
     */
    void saveHistory();

    /**
     * @brief 验证文件是否存在
     * @param path 文件路径
     * @return 如果文件存在则返回true
     */
    bool fileExists(const QString &path) const;

    QStringList m_recentFiles;  // 最近文件列表
    QSettings *m_settings;      // 设置存储
};

#endif // HISTORYMANAGER_H